package limousine.util;

/*
 * Created on Feb 21, 2005
 *
 */
import java.io.UnsupportedEncodingException;
import java.security.Security;
import java.util.Date;
import java.util.Properties;
import javax.mail.Authenticator;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class Mail {

    private static final String SMTP_HOST_NAME = "smtp.gmail.com";
    private static final String SMTP_PORT = "465";
    private static final String emailMsgTxt = "Test Message Contents";
    private static final String emailSubjectTxt = "A test from gmail";
    private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
    private static final String[] sendTo = {"pentai_tai@hotmail.com", "tailer.tai@gmail.com"};
    public static final String emailFromAddress = "tailer.tai@gmail.com";

    public static void main(String args[]) throws Exception {

        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

//        new Mail().sendSSLMessage(sendTo, emailSubjectTxt,
//                emailMsgTxt, emailFromAddress);


        String x = "กรุณากด link ด้านล่าง เพื่อยืนยันการเป็นสมาชิกค่ะ";
        x += "<a href='http://www.google.com' >xxxxx</a>";


        Mail m = new Mail();
        m.sendMail("pentai_tai@hotmail.com", "test", "test");

        System.out.println("Sucessfully Sent mail to All Users");
    }

    public static void sendMail(String recipients, String subject, String message) throws MessagingException, UnsupportedEncodingException {
//        sendSSLMessage(recipients, subject, message, "tailer.tai@gmail.com");//depthfirst
        sendMailMrta(recipients,subject,message);//mrta
    }

    public static void sendMail(String[] recipients, String subject, String message) throws MessagingException, UnsupportedEncodingException {
//        sendSSLMessage(recipients, subject, message, "tailer.tai@gmail.com");//depthfirst
        sendMailMrta(recipients,subject,message);//mrta
    }

    public static void sendSSLMessage(String recipients[], String subject,
            String message, String from) throws MessagingException {
        boolean debug = true;

        Properties props = new Properties();
        props.put("mail.smtp.host", SMTP_HOST_NAME);
        props.put("mail.smtp.auth", "true");
        props.put("mail.debug", "true");
        props.put("mail.smtp.port", SMTP_PORT);
        props.put("mail.smtp.socketFactory.port", SMTP_PORT);
        props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
        props.put("mail.smtp.socketFactory.fallback", "false");

        Session session = Session.getDefaultInstance(props,
                new javax.mail.Authenticator() {

                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication("tailer.tai@gmail.com", "tai!2644");
                    }
                });

        session.setDebug(debug);

        Message msg = new MimeMessage(session);
        InternetAddress addressFrom = new InternetAddress(from);
        msg.setFrom(addressFrom);

        InternetAddress[] addressTo = new InternetAddress[recipients.length];
        for (int i = 0; i < recipients.length; i++) {
            addressTo[i] = new InternetAddress(recipients[i]);
        }
        msg.setRecipients(Message.RecipientType.TO, addressTo);

// Setting the Subject and Content Type
        msg.setSubject(subject);
//        msg.setContent(message, "text/plain");
        msg.setContent(message, "text/html; charset=UTF-8");
        Transport.send(msg);
    }

    public static String getHeader() {
        StringBuffer sb = new StringBuffer();
        sb.append("MRTA Knowledge Management Center<br>");
        sb.append("----------------------------------------------------------<br>");
        sb.append("");
        sb.append("");
        return sb.toString();
    }

    public static String getFooter() {
        StringBuffer sb = new StringBuffer();
        sb.append("");
        sb.append("");
        sb.append("");
        sb.append("----------------------------------------------------------<br>");
        return sb.toString();
    }

    public static void sendSSLMessage(String recipient, String subject,
            String message, String from) throws MessagingException {
        boolean debug = true;

        Properties props = new Properties();
        props.put("mail.smtp.host", SMTP_HOST_NAME);
        props.put("mail.smtp.auth", "true");
        props.put("mail.debug", "true");
        props.put("mail.smtp.port", SMTP_PORT);
        props.put("mail.smtp.socketFactory.port", SMTP_PORT);
        props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
        props.put("mail.smtp.socketFactory.fallback", "false");

        Session session = Session.getDefaultInstance(props,
                new javax.mail.Authenticator() {

                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication("tailer.tai@gmail.com", "tai!2644");
                    }
                });

        session.setDebug(debug);

        Message msg = new MimeMessage(session);
        InternetAddress addressFrom = new InternetAddress(from);
        msg.setFrom(addressFrom);

        InternetAddress[] addressTo = new InternetAddress[1];
        //for (int i = 0; i < recipients.length; i++) {
        addressTo[0] = new InternetAddress(recipient);
        //}
        msg.setRecipients(Message.RecipientType.TO, addressTo);

// Setting the Subject and Content Type
        msg.setSubject(subject);
//        msg.setContent(message, "text/plain");


        message = getHeader() + message + getFooter();

        msg.setContent(message, "text/html; charset=UTF-8");
        Transport.send(msg);
    }


    /*ok with internal mail
    public void sendMail( String recipients, String subject, String message) throws MessagingException, UnsupportedEncodingException
    {
    Properties props = new Properties();
    props.put("mail.smtp.host", "192.168.3.251");
    props.put("mail.smtp.auth", "true");
    props.put("mail.debug", "true");

    Session session = Session.getInstance(props, new MyAuth());

    try {
    Message msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress("kmadmin@mrta.co.th"));

    InternetAddress[] address = {new InternetAddress(recipients)};
    msg.setRecipients(Message.RecipientType.TO, address);
    msg.setSubject("test");
    msg.setSentDate(new Date());

    msg.setText("Message body string");

    Transport.send(msg);
    }
    catch (MessagingException e) {}

    }
    class MyAuth extends Authenticator {
    protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication("kmadmin@mrta.co.th","KmP@ssw0rd2011");
    }
    }
     */
    public static void sendMailMrta(String recipients, String subject, String message) throws MessagingException, UnsupportedEncodingException {
        Properties props = new Properties();
        props.put("mail.smtp.host", "202.129.27.148");
        //props.put("mail.smtp.auth", "true");
        //props.put("mail.debug", "true");

        //Session session = Session.getInstance(props, new MyAuth());
        Session session = Session.getInstance(props);

        try {
            Message msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress("kmadmin@mrta.co.th"));

            InternetAddress[] address = {new InternetAddress(recipients)};
            msg.setRecipients(Message.RecipientType.TO, address);
            msg.setSubject(subject);
            msg.setSentDate(new Date());
            msg.setContent(getHeader() + message + getFooter(), "text/html; charset=UTF-8");

            Transport.send(msg);
        } catch (MessagingException e) {
        }
    }

    public static void sendMailMrta(String[] recipients, String subject, String message) throws MessagingException, UnsupportedEncodingException {
        Properties props = new Properties();
        props.put("mail.smtp.host", "202.129.27.148");
        //props.put("mail.smtp.auth", "true");
        //props.put("mail.debug", "true");

        //Session session = Session.getInstance(props, new MyAuth());
        Session session = Session.getInstance(props);

        try {
            Message msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress("kmadmin@mrta.co.th"));

            InternetAddress[] address = new InternetAddress[recipients.length];
            for (int i = 0; i < recipients.length; i++) {
                address[i] = new InternetAddress(recipients[i]);
            }
            msg.setRecipients(Message.RecipientType.TO, address);

            // InternetAddress[] address = {new InternetAddress(recipients)};
            msg.setRecipients(Message.RecipientType.TO, address);
            msg.setSubject(subject);
            msg.setSentDate(new Date());
            msg.setContent(getHeader() + message + getFooter(), "text/html; charset=UTF-8");

            Transport.send(msg);
        } catch (MessagingException e) {
        }
    }
}
